package com.xuetang.controller.admin;

import com.xuetang.common.R;
import com.xuetang.entity.BloodSugarRecord;
import com.xuetang.service.BloodSugarRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 血糖记录管理控制器（后台管理系统）
 */
@Controller
@RequestMapping("/admin/blood-sugar")
public class BloodSugarRecordAdminController {

    @Autowired
    private BloodSugarRecordService bloodSugarRecordService;

    /**
     * 血糖记录管理页面
     */
    @GetMapping("")
    public String index(Model model) {
        return "admin/blood-sugar/index";
    }

    /**
     * 血糖记录统计分析页面
     */
    @GetMapping("/analysis")
    public String analysis(Model model) {
        return "admin/blood-sugar/analysis";
    }

    /**
     * 获取血糖记录列表（接口）
     */
    @GetMapping("/list")
    @ResponseBody
    public R<Map<String, Object>> list(
            @RequestParam(required = false) Long userId,
            @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
            @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate,
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "10") int size) {

        // 获取记录列表
        List<BloodSugarRecord> records = bloodSugarRecordService.pageForAdmin(userId, startDate, endDate, page, size);

        // 获取总记录数
        int total = bloodSugarRecordService.countForAdmin(userId, startDate, endDate);

        // 构建结果
        Map<String, Object> result = new HashMap<>();
        result.put("records", records);
        result.put("total", total);

        return R.success(result);
    }

    /**
     * 获取血糖记录详情（接口）
     */
    @GetMapping("/detail/{id}")
    @ResponseBody
    public R<BloodSugarRecord> detail(@PathVariable Long id) {
        BloodSugarRecord record = bloodSugarRecordService.getById(id);
        if (record == null) {
            return R.error("记录不存在");
        }
        return R.success(record);
    }

    /**
     * 删除血糖记录（接口）
     */
    @DeleteMapping("/{id}")
    @ResponseBody
    public R<Boolean> delete(@PathVariable Long id) {
        bloodSugarRecordService.deleteById(id, null); // 管理员可删除任何记录
        return R.success(true);
    }

    /**
     * 获取血糖统计数据（接口）
     */
    @GetMapping("/statistics")
    @ResponseBody
    public R<Map<String, Object>> statistics(
            @RequestParam(required = false) Long userId,
            @RequestParam(defaultValue = "week") String timeRange) {

        if (userId == null) {
            // 如果未指定用户ID，返回所有用户的统计数据（需要实现此方法）
            return R.error("请指定用户ID");
        }

        Map<String, Object> statistics = bloodSugarRecordService.getStatistics(userId, timeRange);
        return R.success(statistics);
    }

    /**
     * 获取血糖趋势数据（接口）
     */
    @GetMapping("/trend")
    @ResponseBody
    public R<List<Map<String, Object>>> trend(
            @RequestParam(required = false) Long userId,
            @RequestParam(defaultValue = "week") String timeRange) {

        if (userId == null) {
            // 如果未指定用户ID，返回所有用户的趋势数据（需要实现此方法）
            return R.error("请指定用户ID");
        }

        List<Map<String, Object>> trend = bloodSugarRecordService.getTrend(userId, timeRange);
        return R.success(trend);
    }

    /**
     * 获取按测量类型分组的统计数据（接口）
     */
    @GetMapping("/by-measure-type")
    @ResponseBody
    public R<List<Map<String, Object>>> byMeasureType(
            @RequestParam(required = false) Long userId,
            @RequestParam(defaultValue = "week") String timeRange) {

        if (userId == null) {
            // 如果未指定用户ID，返回所有用户的数据（需要实现此方法）
            return R.error("请指定用户ID");
        }

        List<Map<String, Object>> result = bloodSugarRecordService.getByMeasureType(userId, timeRange);
        return R.success(result);
    }
}